package com.common.base;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.common.util.LoginUtil;
import com.entity.sys.SysUser;
import fuhua.com.util.BaseUtil;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;

public abstract class BaseService<M extends BaseMapper<E>, E extends BaseEntity> extends ServiceImpl<M, E>{

    @Resource
    protected HttpServletRequest httpServletRequest;

    /**
     * 获取当前token
     */
    public String token(){
        return LoginUtil.getToken(httpServletRequest);
    }

    /**
     * 获取当前登录的用户
     */
    public SysUser getLoginUser(){
        return LoginUtil.getLoginUser(token());
    }

    /**
     * 获取当前登录用户的id
     */
    public String loginId(){
        return getLoginUser().getId();
    }

    /**
     * 系统设置模块统一的传参参数设置（这里的参数用于自定义的查询语句）
     */
    public void sysParams(Map<String,String> map){
        BaseUtil.removeNullValue(map);
        SysUser user = getLoginUser();
        if (user.getDataScope() != null){
            map.putAll(user.getDataScope());
        }
    }

    /**
     * 系统设置模块统一的传参参数设置（这里的参数用于自定义的查询语句）
     */
    public void sysParams(Map<String,String> map,String fieldName,String createBy,boolean isId){
        sysParams(map);
        String sqlStr = queryApplyScope(fieldName,createBy, isId);
        if (StrUtil.isNotBlank(sqlStr)){
            map.put("dataScope",sqlStr);
        }
    }

    /**
     * 根据 当前用户的数据范围 拼接查询条件语句
     * @param fieldName  查询的字段名
     * @param self       查询本人数据时使用的的字段名
     * @param isId       拼接的条件是取 部门id 还是 部门name（true id false name）
     */
    public String queryApplyScope(String fieldName,String self,boolean isId){
        SysUser user = getLoginUser();
        if (user.getDataScope() != null){
            return BaseUtil.setQueryApplyScope(user.getDataScope(),fieldName,self,isId);
        }
        return null;
    }

}
